package com.chenfan.mcn.model;

import com.alibaba.fastjson.annotation.JSONField;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.chenfan.mcn.extension.log.FieldDesc;
import com.chenfan.mcn.enums.CommonSettleStatusEnum;
import com.chenfan.mcn.enums.ExcutionApprovalStatusEnum;
import com.chenfan.mcn.component.dict.BrandCodeTranslator;
import com.chenfan.mcn.extension.log.FieldTypeEnum;
import com.chenfan.mcn.model.base.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;

import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
import java.util.Date;

/**
 * @author tangwei
 * Date:     2021/1/20 10:44
 * Description: 合同执行单
 */
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("contract_excution_order")
public class ContractExcutionOrder extends BaseEntity {

    private static final long serialVersionUID = -5267675795690887735L;

    /**
     * 执行单号
     */
    private String excuteCode;

    /**
     * 收入合同主键id
     */
    private Long incomeContractId;

    /**
     * 收入合同编号
     */
    private String incomeContractCode;

    /**
     * 收入合同补充协议主键id
     */
    private Long contractAgreementId;

    /**
     * 客户id
     */
    private Long customerId;
    /**
     * 客户编码
     */
    private String customerCode;

    /**
     * 采购合同单号
     */
    @FieldDesc(value = "采购单号")
    private String purchaseCode;

    /**
     * star_platform_info表主键id
     */
    private Long starPlatformInfoId;

    /**
     * 执行单类型：1-内部红人执行单，2-外部红人执行单，3-KOC红人执行单
     */
    private Integer type;

    public void setType(Integer type) {
        this.type = type;
    }

    /**
     * 红人id
     */
    private Long starId;

    /**
     * 平台id
     */
    private String platformId;

    /**
     * 平台昵称
     */
    @TableField(exist = false)
    private String platNickName;

    /**
     * 平台昵称
     */
    @FieldDesc("平台昵称")
    private String starNickName;

    /**
     * 单据状态：-2_待执行, -1_执行中, 0_待提交, 1_审批中, 2_审批通过, 3_审批拒绝, 4_已撤回, 9_作废
     */
    @FieldDesc(value = "单据状态", translator = ExcutionApprovalStatusEnum.class)
    private Integer approvalStatus;

    /**
     * 单据状态名称
     */
    @TableField(exist = false)
    private String approvalStatusName;

    /**
     * 发布类型（数据字典）
     */
    @NotNull
    @FieldDesc(value = "发布类型")
    private String publishType;

    /**
     * 发布形式（数据字典）
     */
    @NotNull
    @FieldDesc(value = "发布形式")
    private String publishForm;

    public void setPublishForm(String publishForm) {
        this.publishForm = publishForm;
    }

    /**
     * 发布日期
     */
    @JSONField(format = "yyyy-MM-dd")
    @NotNull
    @FieldDesc(value = "发布日期开始时间")
    private Date promisePublishDate;

    /**
     * 品牌
     */
    @FieldDesc(value = "品牌", translator = BrandCodeTranslator.class)
    private String brandName;

    /**
     * 产品名称
     */
    @NotNull
    @FieldDesc(value = "产品名称")
    private String productName;

    /**
     * 品类（数据字典）
     */
    @NotNull
    @FieldDesc(value = "品类")
    private String category;

    /**
     * 总收入（元）
     */
    @NotNull
    @FieldDesc(value = "总收入（元）")
    private BigDecimal actualQuotedPrice;

    /**
     * 红人分成比例
     */
    @FieldDesc(value = "红人分成比例（%）")
    private BigDecimal dividedRate;

    /**
     * 微任务金额
     */
    @Deprecated
    @NotNull
    @FieldDesc(value = "微任务金额")
    private BigDecimal microTaskAmount;

    /**
     * 粉丝头条金额
     */
    @NotNull
    @FieldDesc(value = "粉丝头条金额")
    private BigDecimal fansHeadlineAmount;

    /**
     * 平台手续费
     */
    @NotNull
    @FieldDesc(value = "平台手续费")
    private BigDecimal platformFee;

    /**
     * 机酒差旅补贴（元）
     */
    @NotNull
    @FieldDesc(value = "机酒差旅补贴（元）")
    private BigDecimal otherFee;

    /**
     * 内容实际报价（原：本单金额）
     */
    @FieldDesc(value = "内容实际报价（原：本单金额）")
    private BigDecimal realAmount;

    /**
     * 是否平台下单
     */
    @FieldDesc(value = "是否平台下单：0否1是")
    private Boolean platformReport;

    /**
     * 红人收款账户主键id
     */
    private Long starAccountInfoId;

    /**
     * 执行人id
     */
    private Long excutorId;

    /**
     * 执行人名称
     */
    @FieldDesc(value = "执行人名称")
    private String excutorName;

    /**
     * 执行人部门id
     */
    private Long excutorDepartmentId;

    /**
     * 执行人部门名称
     */
    private String excutorDepartmentName;

    /**
     * 打款至红人日期
     */
    @FieldDesc(value = "打款至红人日期", format = "yyyy-MM-dd")
    private Date paidStarDate;

    /**
     * 打款备注
     */
    @FieldDesc(value = "打款备注")
    private String paidRemark;

    /**
     * 打款方式
     */
    @FieldDesc(value = "打款方式")
    private String paidWay;

    /**
     * 第三方打款账户ID
     */
    private Long accountId;

    /**
     * '1, "红人收款账户" 2, "客户收款账户" 3, "公司账户" 4, "第三方账户"',
     */
    private Integer accountType;

    /**
     * 平台手续费率（%）
     */
    @FieldDesc(value = "平台手续费率（%）")
    private BigDecimal handlingFeeRate;

    /**
     * 开票方式(1=开票、3=后补票)',
     */
    @FieldDesc(value = "开票方式", replace = {"开票_1", "无票_2", "后补票_3", "_null"})
    private Integer customerInvoiceWay;


    /**
     * 备注
     */
    @FieldDesc(value = "备注")
    private String remark;

    /**
     * 对应客户返点比例
     */
    @TableField(exist = false)
    private BigDecimal customerRebateRate;

    /**
     * 附件-JSON字符串
     */
    private String attachmentFile;

    /**
     * 是否入驻：0否1是
     */
    @FieldDesc(value = "是否入驻", replace = {"否_0","是_1"})
    private Integer inSystemAdmin;


    /**
     * 提交审批人id
     */
    private Long approvalBy;

    /**
     * 提交审批人名称
     */
    private String approvalName;

    /**
     * 提交审批时间
     */
    private Date approvalDate;

    /**
     * 审批通过时间
     */
    private Date transitDate;

    /**
     * AE提成结算状态：0:未结算；1:结算中；2:已结算
     */
    @TableField("commission_settle_status")
    @FieldDesc(value = "AE提成结算状态", translator = CommonSettleStatusEnum.class)
    private Integer commissionSettleStatus;

    /**
     * 统筹人id
     */
    private Long coordinatorId;

    /**
     * 统筹人名称
     */
    private String coordinatorName;

    /**
     * 部门负责人id
     */
    private Long departmentHeaderId;

    /**
     * version:V1.2.0
     * 部门负责人名称
     */
    private String departmentHeaderName;

    /**
     * 开始执行时间
     */
    private Date startExecutionDate;


    /**
     * 下单平台
     */
    private String orderPlatform;

    /**
     * 平台订单号
     */
    @FieldDesc(value = "平台订单号")
    private String platformOrderCode;

    /**
     * 平台订单号
     */
    @Deprecated
    @TableField(exist = false)
    private String platformOrderNumber;

    /**
     * 年框合同编号
     */
    private String yearCode;

    /**
     * 红人返点合同ID
     */
    private Long starRebateId;

    /**
     * 红人返点合同编号
     */
    private String starRebateCode;

    /**
     * (开票信息)开票形式：0无需开票；1开票待定；2开票
     */
    @FieldDesc(value = "开票形式", replace = {"无需开票_0", "开票待定_1", "开票_2"})
    private Integer invoiceForm;

    /**
     * (开票信息)开票抬头
     */
    @FieldDesc(value = "开票抬头")
    private String invoiceTitle;

    /**
     * (开票信息)开票类型：普票；专票
     */
    @FieldDesc(value = "开票类型")
    private String invoiceType;

    /**
     * (开票信息)开票内容
     */
    @FieldDesc(value = "开票内容")
    private String invoiceContent;

    /**
     * 红人开票信息id
     */
    private Long starBillingHeaderId;

    /**
     * 意向单ID
     */
    @TableField(exist = false)
    private Long intentionOrderId;


    /**
     * 意向单编号
     */
    @TableField(exist = false)
    private String intentionCode;


    /**
     * 机酒差旅补贴说明
     */
    @FieldDesc(value = "机酒差旅补贴说明")
    private String specialFeeRemark;

    /**
     * 刊例原价（元）
     */
    @FieldDesc(value = "刊例原价（元）")
    private BigDecimal cardRatePrice;


    /**
     * 其他加价收入
     */
    @FieldDesc(value = "其他加价收入")
    private BigDecimal otherAmount;

    /**
     * 其他加价收入说明
     */
    @FieldDesc(value = "其他加价收入说明")
    private String otherAmountRemark;


    /**
     * 本单实际优惠比例（%）
     */
    @TableField(exist = false)
    @FieldDesc(value = "本单实际优惠比例（%）")
    private BigDecimal actualDiscountRatio;


    /**
     * 内容报价返点比例（%）
     */
    @TableField(exist = false)
    private BigDecimal aeCustomerRabateRate;

    /**
     * 内容报价返点金额
     */
    @TableField(exist = false)
    private BigDecimal aeCustomerRabateAmount;


    /**
     * 合作内容（取自数据字典）
     */
    @TableField("cooperation_content")
    private String cooperationContent;

    /**
     * 本单分成备注
     */
    @FieldDesc(value = "本单分成备注")
    private String dividedRemark;

    /**
     * 发布日期结束时间
     */
    @JSONField(format = "yyyy-MM-dd")
    @NotNull
    @FieldDesc(value = "发布日期结束时间")
    private Date promisePublishDateEnd;

    /**
     * 是否挂车/橱窗/组件：0否1是
     */
    @TableField("have_link_command")
    @FieldDesc(value = "是否挂车/橱窗/组件",replace = {"否_0","是_1"})
    private Integer haveLinkCommand;


    /**
     * 其他补贴性收入（元）
     */
    @TableField("subsidy_income_amount")
    @FieldDesc(value = "其他补贴性收入（元）")
    private BigDecimal subsidyIncomeAmount;

    /**
     * 其他补贴性收入说明
     */
    @TableField("subsidy_income_remark")
    @FieldDesc(value = "其他补贴性收入说明")
    private String subsidyIncomeRemark;

    /**
     * 回款状态：0未回款；1部分回款；2已回款
     */
    @TableField("payback_status")
    @FieldDesc(value = "回款状态", replace = {"待回款_0","部分回款_1","已回款_2"})
    private Integer paybackStatus;

    /**
     * 累计回款金额
     */
    @TableField("payback_amount")
    @FieldDesc(value = "累计回款金额（元）")
    private BigDecimal paybackAmount;

    /**
     * 回款时间
     */
    @TableField("payback_date")
    @FieldDesc(value = "回款时间", format = "yyyy-MM-dd")
    private Date paybackDate;

    /**
     * 商务提成结算状态：0:未结算；1:结算中；2:已结算
     */
    @TableField("business_commission_settle_status")
    @FieldDesc(value = "商务提成结算状态", translator = CommonSettleStatusEnum.class)
    private Integer businessCommissionSettleStatus;

    /**
     * 客户返点结算状态：0:未结算；1:结算中；2:已结算
     */
    @TableField("rebate_settle_status")
    @FieldDesc(value = "客户返点结算状态", translator = CommonSettleStatusEnum.class)
    private Integer rebateSettleStatus;

    /**
     * 用于查询排序
     */
    @TableField(exist = false)
    private Date realPublishDate;

    /**
     * 确认/驳回 原因
     */
    @FieldDesc(value = "确认/驳回-原因")
    @TableField(exist = false)
    private String reason;

    /**
     * AE发布备注
     */
    @FieldDesc(value = "AE发布备注")
    private String aePublishRemark;

    /**
     * AE发布附件
     */
    @FieldDesc(value = "AE发布附件", fieldType = FieldTypeEnum.IMAGE)
    private String aePublishAttachment;
}
